import axios from 'axios'
import {
  throwErr
} from '@/utils/throwErr' //utils 捕捉服务端http状态码的方法
import store from '@/store' //引入vuex的相关操作

import router from '@/router'
// import { async } from 'q';
axios.defaults.withCredentials = true;

//过滤请求
axios.interceptors.request.use(config => {
  //config 为请求的一些配置 例如：请求头 请求时间 Token  可以根据自己的项目需求个性化配置，参考axios的中文说明手册  自己多动动手
  //由于我们项目的后端大大给力，很多东西在服务端帮我们处理好了所以请求阶段只要传好参数就好了
  config.timeout = 30 * 1000 //请求响应时间
  return config
}, error => {
  return Promise.reject(error)
})
// 添加响应拦截器
axios.interceptors.response.use(
  response => {
    // alert(JSON.stringify(response.data))
    if (response.data.success) {
      return Promise.resolve(response);
    } else {
      if (response.data.weixin != ""){
        return Promise.resolve(response);
      }
      return Promise.reject(response);
    }
  },
  error => {
    // if (error) {
    //   let res = {};
    //   res.data.code = error.response.status;
    //   res.data.message = throwErr(error.response.status); //throwErr 捕捉服务端的http状态码 定义在utils工具类的方法
    //   return Promise.reject(res);
    // } else {
    //   let time =0;
    //   var timer = setInterval(() => {
    //     time++;
    //     // console.log(time);
    //     if (time == 10) {
    //       clearInterval(timer);
    //       Toast.fail('连接超时，服务器无响应');
    //     }
    //   }, 1000);
    //
    // }
    // return Promise.reject(error);
    let res = {
      data:{
        code:"",
        message:"",
      }
    }
    res.success = false;
    if (error) {
      res.data.code = "501";
      res.data.message = "请求超时";
      return Promise.reject(res)
    } else {
      res.data.code = "500";
      res.data.message = "请求失败";
      Toast.fail('连接超时，服务器无响应');
      return Promise.reject(res)
    }
  }
);
export default  function request(method, url, data) { //暴露 request 给我们好API 管理
  method = method.toLocaleLowerCase() //封装RESTful API的各种请求方式 以 post get delete为例
  if (method === 'post') {
    return  axios.post(url, data) //axios的post 默认转化为json格式
  } else if (method === 'get') {
    return  axios.get(url, {
      params: data
    })
  } else if (method === 'delete') {
    return  axios.delete(url, {
      params: data
    })
  }
}
